Studentas: Eglė Černyšova¶

Euribor rodiklio įtaka paskolų palūkanoms, nekilnojamojo turto kainų ir nuomos rinkai, akcijų rinkai¶

Euribor (Euro Interbank Offered Rate) yra svarbus finansų rodiklis, kuris nustato vidutines palūkanų normas, kurios siūlomos tarpbankinėse paskolose eurais. Šis rodiklis yra pagrindinė Europos bankų sąveikos dalis ir svarbus veiksnys finansų rinkoje.¶
Siekiant geriau suprasti šio rodiklio įtaką, bus atlikta analizė, kaip Euribor rodiklis koreliuoja su skirtingomis finansų rinkomis, įskaitant paskolų palūkanas, nekilnojamojo turto kainas, nuomos rinką ir akcijų rinką.¶
Duomenų šaltiniai:¶
* Europos centrinio banko duomenų portalas: https://data.ecb.europa.eu/
* Trading View: https://www.tradingview.com/symbols/TVC-SXXP/
Duomenų importavimas¶
In [1]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.graphics.tsaplots import plot_acf
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.tsa.statespace.sarimax import SARIMAX
In [2]:
euribor = pd.read_csv("C:\Baigiamasis darbas\ECB euribor data.csv")
loans = pd.read_excel("C:\Baigiamasis darbas\ECB Loans cost exe.xlsx")
property = pd.read_excel("C:\Baigiamasis darbas\ECB Residential property prices by country exe.xlsx")
rental = pd.read_excel("C:\\Baigiamasis darbas\\ECB rentals for housing by country exe.xlsx")
index = pd.read_excel("C:\Baigiamasis darbas\Europe 600 Index exe.xlsx")
In [3]:
euribor
Out[3]:
date time_period euribor_3_month
0 1994-01-31 1994Jan 6.9100
1 1994-02-28 1994Feb 6.8600
2 1994-03-31 1994Mar 6.7500
3 1994-04-30 1994Apr 6.5700
4 1994-05-31 1994May 6.2400
... ... ... ...
353 2023-06-30 2023Jun 3.5359
354 2023-07-31 2023Jul 3.6718
355 2023-08-31 2023Aug 3.7803
356 2023-09-30 2023Sep 3.8800
357 2023-10-31 2023Oct 3.9676

358 rows × 3 columns

In [4]:
loans
Out[4]:
date obs_value series_key
0 2003-01-31 4.96 MIR.M.AT.B.A2C.AM.R.A.2250.EUR.N
1 2003-02-28 4.85 MIR.M.AT.B.A2C.AM.R.A.2250.EUR.N
2 2003-03-31 4.80 MIR.M.AT.B.A2C.AM.R.A.2250.EUR.N
3 2003-04-30 4.48 MIR.M.AT.B.A2C.AM.R.A.2250.EUR.N
4 2003-05-31 4.36 MIR.M.AT.B.A2C.AM.R.A.2250.EUR.N
... ... ... ...
4255 2023-05-31 3.78 MIR.M.SK.B.A2C.AM.R.A.2250.EUR.N
4256 2023-06-30 3.92 MIR.M.SK.B.A2C.AM.R.A.2250.EUR.N
4257 2023-07-31 3.91 MIR.M.SK.B.A2C.AM.R.A.2250.EUR.N
4258 2023-08-31 3.94 MIR.M.SK.B.A2C.AM.R.A.2250.EUR.N
4259 2023-09-30 3.92 MIR.M.SK.B.A2C.AM.R.A.2250.EUR.N

4260 rows × 3 columns

In [5]:
property
Out[5]:
date obs_value series_key
0 2000-03-31 60.81 RESR.Q.AT._T.N._TR.TVAL.4F0.TB.N.IX
1 2000-06-30 59.79 RESR.Q.AT._T.N._TR.TVAL.4F0.TB.N.IX
2 2000-09-30 58.78 RESR.Q.AT._T.N._TR.TVAL.4F0.TB.N.IX
3 2000-12-31 58.60 RESR.Q.AT._T.N._TR.TVAL.4F0.TB.N.IX
4 2001-03-31 61.46 RESR.Q.AT._T.N._TR.TVAL.4F0.TB.N.IX
... ... ... ...
2426 2022-06-30 175.62 RESR.Q.SK._T.N._TR.TVAL.4D0.TB.N.IX
2427 2022-09-30 180.61 RESR.Q.SK._T.N._TR.TVAL.4D0.TB.N.IX
2428 2022-12-31 179.18 RESR.Q.SK._T.N._TR.TVAL.4D0.TB.N.IX
2429 2023-03-31 179.19 RESR.Q.SK._T.N._TR.TVAL.4D0.TB.N.IX
2430 2023-06-30 172.26 RESR.Q.SK._T.N._TR.TVAL.4D0.TB.N.IX

2431 rows × 3 columns

In [6]:
rental
Out[6]:
date obs_value series_key
0 2015-12-31 100.00 ICP.M.AL.N.041000.4.INX
1 2016-01-31 100.00 ICP.M.AL.N.041000.4.INX
2 2016-02-29 100.00 ICP.M.AL.N.041000.4.INX
3 2016-03-31 100.00 ICP.M.AL.N.041000.4.INX
4 2016-04-30 100.00 ICP.M.AL.N.041000.4.INX
... ... ... ...
8835 2023-05-31 113.03 ICP.M.SK.N.041000.4.INX
8836 2023-06-30 113.52 ICP.M.SK.N.041000.4.INX
8837 2023-07-31 113.78 ICP.M.SK.N.041000.4.INX
8838 2023-08-31 115.06 ICP.M.SK.N.041000.4.INX
8839 2023-09-30 114.97 ICP.M.SK.N.041000.4.INX

8840 rows × 3 columns

In [7]:
index
Out[7]:
date Open High Low Close
0 2023-11-30 434.71 445.89 433.33 442.81
1 2023-10-31 450.82 457.02 428.84 433.66
2 2023-09-30 458.31 465.32 444.38 450.22
3 2023-08-31 470.95 471.19 445.50 458.19
4 2023-07-31 461.89 472.69 444.91 471.35
... ... ... ... ... ...
354 1994-05-31 134.92 134.92 127.77 127.77
355 1994-04-30 131.37 135.85 131.02 134.74
356 1994-03-31 135.49 137.40 130.82 130.82
357 1994-02-28 143.87 144.68 135.94 136.98
358 1994-01-31 138.48 144.44 137.99 144.44

359 rows × 5 columns

Darbas su duomenimis¶
In [8]:
euribor.rename(columns={' euribor_3_month': 'euribor_3_month'}, inplace=True)
In [9]:
country_mapping = {
    'AT': 'Austria',
    'BE': 'Belgium',
    'CY': 'Cyprus',
    'CZ': 'Czech Republic',
    'HR': 'Croatia',
    'HU': 'Hungary',
    'DK': 'Denmark',
    'LT': 'Lithuania',
    'LU': 'Luxembourg',
    'LV': 'Latvia',
    'DE': 'Germany',
    'EE': 'Estonia',
    'ES': 'Spain',
    'FI': 'Finland',
    'FR': 'France',
    'GR': 'Greece',
    'IE': 'Ireland',
    'IT': 'Italy',
    'MT': 'Malta',
    'NL': 'Netherlands',
    'PT': 'Portugal',
    'PL': 'Poland',
    'RO': 'Romania',
    'SI': 'Slovenia',
    'SK': 'Slovakia',
    'SE': 'Sweden'
}

def replace_country_code(text):
    for code, name in country_mapping.items():
        if code in text:
            return name
    return text

loans['series_key'] = loans['series_key'].apply(replace_country_code)

loans.rename(columns={'series_key': 'country'}, inplace=True)
loans
Out[9]:
date obs_value country
0 2003-01-31 4.96 Austria
1 2003-02-28 4.85 Austria
2 2003-03-31 4.80 Austria
3 2003-04-30 4.48 Austria
4 2003-05-31 4.36 Austria
... ... ... ...
4255 2023-05-31 3.78 Slovakia
4256 2023-06-30 3.92 Slovakia
4257 2023-07-31 3.91 Slovakia
4258 2023-08-31 3.94 Slovakia
4259 2023-09-30 3.92 Slovakia

4260 rows × 3 columns

In [10]:
country_mapping = {
    'AT': 'Austria',
    'BE': 'Belgium',
    'CY': 'Cyprus',
    'CZ': 'Czech Republic',
    'HR': 'Croatia',
    'HU': 'Hungary',
    'DK': 'Denmark',
    'LT': 'Lithuania',
    'LU': 'Luxembourg',
    'LV': 'Latvia',
    'DE': 'Germany',
    'EE': 'Estonia',
    'ES': 'Spain',
    'FI': 'Finland',
    'FR': 'France',
    'GR': 'Greece',
    'IE': 'Ireland',
    'IT': 'Italy',
    'MT': 'Malta',
    'NL': 'Netherlands',
    'PT': 'Portugal',
    'PL': 'Poland',
    'RO': 'Romania',
    'SI': 'Slovenia',
    'SK': 'Slovakia',
    'SE': 'Sweden'
}

def replace_country_code(text):
    for code, name in country_mapping.items():
        if code in text:
            return name
    return text

property['series_key'] = property['series_key'].apply(replace_country_code)

property.rename(columns={'series_key': 'country'}, inplace=True)
property
Out[10]:
date obs_value country
0 2000-03-31 60.81 Austria
1 2000-06-30 59.79 Austria
2 2000-09-30 58.78 Austria
3 2000-12-31 58.60 Austria
4 2001-03-31 61.46 Austria
... ... ... ...
2426 2022-06-30 175.62 Spain
2427 2022-09-30 180.61 Spain
2428 2022-12-31 179.18 Spain
2429 2023-03-31 179.19 Spain
2430 2023-06-30 172.26 Spain

2431 rows × 3 columns

In [11]:
country_mapping = {
    'AL': 'Albania',
    'AT': 'Austria',
    'BE': 'Belgium',
    'BG': 'Bulgaria',
    'GB': 'United Kingdom',
    'CY': 'Cyprus',
    'CZ': 'Czech Republic',
    'HR': 'Croatia',
    'HU': 'Hungary',
    'DK': 'Denmark',
    'LT': 'Lithuania',
    'LU': 'Luxembourg',
    'LV': 'Latvia',
    'DE': 'Germany',
    'EE': 'Estonia',
    'ES': 'Spain',
    'FI': 'Finland',
    'FR': 'France',
    'GR': 'Greece',
    'IE': 'Ireland',
    'IT': 'Italy',
    'MT': 'Malta',
    'NL': 'Netherlands',
    'PT': 'Portugal',
    'PL': 'Poland',
    'RO': 'Romania',
    'SI': 'Slovenia',
    'SK': 'Slovakia',
    'SE': 'Sweden'
}

def replace_country_code(text):
    for code, name in country_mapping.items():
        if code in text:
            return name
    return text

rental['series_key'] = rental['series_key'].apply(replace_country_code)

rental.rename(columns={'series_key': 'country'}, inplace=True)
rental
Out[11]:
date obs_value country
0 2015-12-31 100.00 Albania
1 2016-01-31 100.00 Albania
2 2016-02-29 100.00 Albania
3 2016-03-31 100.00 Albania
4 2016-04-30 100.00 Albania
... ... ... ...
8835 2023-05-31 113.03 Slovakia
8836 2023-06-30 113.52 Slovakia
8837 2023-07-31 113.78 Slovakia
8838 2023-08-31 115.06 Slovakia
8839 2023-09-30 114.97 Slovakia

8840 rows × 3 columns

In [12]:
euribor['date'] = pd.to_datetime(euribor['date'])
loans['date'] = pd.to_datetime(loans['date'])
property['date'] = pd.to_datetime(property['date'])
rental['date'] = pd.to_datetime(property['date'])
index['date'] = pd.to_datetime(index['date'])
In [13]:
loans.rename(columns={'obs_value': 'loans_obs_value'}, inplace=True)
property.rename(columns={'obs_value': 'property_obs_value'}, inplace=True)
rental.rename(columns={'obs_value': 'rental_obs_value'}, inplace=True)
In [14]:
euribor.to_csv('euribor_pakoreguotas_naujas.csv', index=False)
loans.to_excel('loans_pakoreguotas_naujas.xlsx', index=False)
rental.to_excel('rental_pakoreguotas_naujas.xlsx', index=False)
property.to_excel('property_pakoreguotas_naujas.xlsx', index=False)
index.to_excel('index_pakoreguotas_naujas.xlsx', index=False)

Euribor koreliacija su skirtingais rodikliais¶

In [15]:
merged_data = pd.merge(euribor, loans, on='date', how='inner')
correlation = merged_data['euribor_3_month'].corr(merged_data['loans_obs_value'])
print(f"Koreliacijos koeficientas su paskolų palūkanų norma: {correlation}")
Koreliacijos koeficientas su paskolų palūkanų norma: 0.8018228119497622
In [16]:
data = merged_data[['euribor_3_month', 'loans_obs_value']]
plt.figure(figsize=(10, 6))
plot_acf(data['euribor_3_month'], lags=50)
plt.title('Cross-correlation tarp euribor ir paskolų palūkanų')
plt.xlabel('Lag')
plt.ylabel('Correlation')
plt.show()
<Figure size 1000x600 with 0 Axes>
In [17]:
merged_data = pd.merge(euribor, property, on='date', how='inner')
correlation = merged_data['euribor_3_month'].corr(merged_data['property_obs_value'])
print(f"Koreliacijos koeficientas su nekilnojamojo turto kaina: {correlation}")
Koreliacijos koeficientas su nekilnojamojo turto kaina: -0.3816087917831894
In [18]:
data = merged_data[['euribor_3_month', 'property_obs_value']]
plt.figure(figsize=(10, 6))
plot_acf(data['euribor_3_month'], lags=50)
plt.title('Cross-correlation tarp euribor ir nekilnojamojo turto kainos')
plt.xlabel('Lag')
plt.ylabel('Correlation')
plt.show()
<Figure size 1000x600 with 0 Axes>
In [19]:
merged_data = pd.merge(euribor, rental, on='date', how='inner')
correlation = merged_data['euribor_3_month'].corr(merged_data['rental_obs_value'])
print(f"Koreliacijos koeficientas su nuomos kaina: {correlation}")
Koreliacijos koeficientas su nuomos kaina: 0.012681742253834007
In [20]:
data = merged_data[['euribor_3_month', 'rental_obs_value']]
plt.figure(figsize=(10, 6))
plot_acf(data['euribor_3_month'], lags=50)
plt.title('Cross-correlation tarp euribor ir būsto nuomos kainos')
plt.xlabel('Lag')
plt.ylabel('Correlation')
plt.show()
<Figure size 1000x600 with 0 Axes>
In [21]:
merged_data = pd.merge(euribor, index, on='date', how='inner')
correlation = merged_data['euribor_3_month'].corr(merged_data['Close'])
print(f"Koreliacijos koeficientas su akcijų indeksu: {correlation}")
Koreliacijos koeficientas su akcijų indeksu: -0.5687010893226756
Išvados¶

Paskolos (0.8018): Teigiama koreliacija rodo, kad didėjant Euribor, didėja ir paskolų palūkanos. Tai gali būti pagrįsta tuo, kad dauguma paskolų palūkanų yra susietos su šiuo referentiniu rodikliu.

Nekilnojamojo turto kaina (-0.3816): Neigiamas koreliacijos koeficientas rodo, kad didėjant Euribor, mažėja nekilnojamojo turto kaina. Tai gali būti paaiškinama tuo, kad aukštos palūkanos gali sumažinti žmonių galimybes įsigyti būstą ir, taip sumažėjus paklausai, kaina mažėja.

Nuomos kaina (-0.6266): Taip pat pastebime neigiamą koreliaciją su nuomos kaina. Tai gali reikšti, kad didėjant Euribor, mažėja ir nuomos kainos, nes žmonės galbūt daugiau linkę pirkti nei nuomotis dėl didesnių palūkanų.

Akcijų indeksas (nan): "nan" reiškia, kad tarp Euribor ir akcijų indekso nėra statistiškai reikšmingo koreliacijos ryšio. Gali būti, kad šie duomenys yra nepriklausomi vienas nuo kito arba kad yra kitų veiksnių, įtakojančių akcijų indeksą.

Ko galime tikėtis ateityje?¶

Kaip galbūt kis Euribor rodiklis ir nekilnojamojo turto kainos per artimiausius du metus?

In [22]:
model = ARIMA(euribor['euribor_3_month'], order=(1, 1, 1))
model_fit = model.fit()

forecast_steps = 24
forecast = model_fit.get_forecast(steps=forecast_steps)
forecast_index = pd.date_range(start=euribor['date'].max(), periods=forecast_steps + 1, freq='M')[1:]
forecast_values = forecast.predicted_mean

plt.figure(figsize=(10, 6))
plt.plot(euribor['date'], euribor['euribor_3_month'], label='Euribor')
plt.plot(forecast_index, forecast_values, label='Euribor Forecast', linestyle='dashed')
plt.title('Euribor Rate Forecast')
plt.xlabel('Date')
plt.ylabel('Euribor Rate')
plt.legend()
plt.show()
In [23]:
merged_data = pd.merge(euribor, property, on='date', how='inner')

data_for_model = merged_data[['date', 'euribor_3_month', 'property_obs_value']]
data_for_model.set_index('date', inplace=True)

train_size = int(len(data_for_model) * 0.8)
train, test = data_for_model[:train_size], data_for_model[train_size:]

order = (1, 1, 1) 
seasonal_order = (1, 1, 1, 12)  
model = SARIMAX(data_for_model['property_obs_value'].astype(float), order=order, seasonal_order=seasonal_order, enforce_stationarity=False)
fit_model = model.fit()

forecast_end_date = pd.to_datetime('2025-12-01')
forecast_horizon = (forecast_end_date - test.index[-1]).days // 30
forecasts = fit_model.get_forecast(steps=forecast_horizon)

plt.figure(figsize=(15, 6))
plt.plot(train['property_obs_value'], label='Train')
plt.plot(test.index, test['property_obs_value'], label='Test')
plt.plot(pd.date_range(start=test.index[-1], periods=forecast_horizon + 1, freq='M')[1:], forecasts.predicted_mean, label='Forecast', color='green')
plt.title('SARIMA Forecast for Property Prices')
plt.xlabel('Date')
plt.ylabel('Property Value')
plt.legend()
plt.show()
C:\Users\User\anaconda3\Lib\site-packages\statsmodels\tsa\base\tsa_model.py:473: ValueWarning: A date index has been provided, but it has no associated frequency information and so will be ignored when e.g. forecasting.
  self._init_dates(dates, freq)
C:\Users\User\anaconda3\Lib\site-packages\statsmodels\tsa\base\tsa_model.py:473: ValueWarning: A date index has been provided, but it has no associated frequency information and so will be ignored when e.g. forecasting.
  self._init_dates(dates, freq)
C:\Users\User\anaconda3\Lib\site-packages\statsmodels\tsa\base\tsa_model.py:836: ValueWarning: No supported index is available. Prediction results will be given with an integer index beginning at `start`.
  return get_prediction_index(
C:\Users\User\anaconda3\Lib\site-packages\statsmodels\tsa\base\tsa_model.py:836: FutureWarning: No supported index is available. In the next version, calling this method in a model without a supported index will result in an exception.
  return get_prediction_index(
Šiek tiek statistikos¶

Kurioje šalyje pirkti būstą pigiausia/brangiausia?

In [24]:
average_prices = property.groupby('country')['property_obs_value'].mean()

max_price_country = average_prices.idxmax()
max_price_value = average_prices.max()

min_price_country = average_prices.idxmin()
min_price_value = average_prices.min()

print(f"Šalis su didžiausia būsto kaina: {max_price_country} (vidutinė kaina: {max_price_value})")
print(f"Šalis su mažiausia būsto kaina: {min_price_country} (vidutinė kaina: {min_price_value})")
Šalis su didžiausia būsto kaina: Hungary (vidutinė kaina: 131.52712121212122)
Šalis su mažiausia būsto kaina: Belgium (vidutinė kaina: 54.87559405940594)

Kurioje šalyje nomuotis būstą pigiausia/brangiausia?

In [25]:
average_prices = rental.groupby('country')['rental_obs_value'].mean()

max_price_country = average_prices.idxmax()
max_price_value = average_prices.max()

min_price_country = average_prices.idxmin()
min_price_value = average_prices.min()

print(f"Šalis su didžiausia būsto nuomos kaina: {max_price_country} (vidutinė kaina: {max_price_value})")
print(f"Šalis su mažiausia būsto nuomos kaina: {min_price_country} (vidutinė kaina: {min_price_value})")
Šalis su didžiausia būsto nuomos kaina: Albania (vidutinė kaina: 104.92)
Šalis su mažiausia būsto nuomos kaina: Lithuania (vidutinė kaina: 73.93432432432432)

Kurioje šalyje palūkanų normos yra mažiausios/didžiausios?

In [26]:
average_interests = loans.groupby('country')['loans_obs_value'].mean()

max_interest_country = average_interests.idxmax()
max_interest_value = average_interests.max()

min_interest_country = average_interests.idxmin()
min_interest_value = average_interests.min()

print(f"Šalis su didžiausia paskolų palūkanų norma: {max_interest_country} (vidutinė norma: {max_interest_value})")
print(f"Šalis su mažiausia paskolų palūkanų norma: {min_interest_country} (vidutinė norma: {min_interest_value})")
Šalis su didžiausia paskolų palūkanų norma: Cyprus (vidutinė norma: 3.768095238095238)
Šalis su mažiausia paskolų palūkanų norma: Finland (vidutinė norma: 2.27136546184739)

Kur 2023 metais nekilnojamojo turto kainos buvo mažiausios/didžiausios?

In [27]:
year_2023_data = property[property['date'].dt.year == 2023]

sorted_data = year_2023_data.sort_values(by='property_obs_value')

cheapest_country = sorted_data.iloc[0]['country']
cheapest_price = sorted_data.iloc[0]['property_obs_value']

expensive_country = sorted_data.iloc[-1]['country']
expensive_price = sorted_data.iloc[-1]['property_obs_value']

print(f"Pigiausia šalis 2023 m.: {cheapest_country} (kaina: {cheapest_price})")
print(f"Brangiausia šalis 2023 m.: {expensive_country} (kaina: {expensive_price})")
Pigiausia šalis 2023 m.: Spain (kaina: 106.52)
Brangiausia šalis 2023 m.: Hungary (kaina: 266.92)

Kur 2023 metais nekilnojamojo turto nuomos kainos buvo mažiausios/didžiausios?

In [28]:
year_2023_data = rental[rental['date'].dt.year == 2023]

sorted_data = year_2023_data.sort_values(by='rental_obs_value')

cheapest_country = sorted_data.iloc[0]['country']
cheapest_price = sorted_data.iloc[0]['rental_obs_value']

expensive_country = sorted_data.iloc[-1]['country']
expensive_price = sorted_data.iloc[-1]['rental_obs_value']

print(f"Pigiausia šalis 2023 m. išsinomuoti būstą: {cheapest_country} (kaina: {cheapest_price})")
print(f"Brangiausia šalis 2023 m. išsinomuoti būstą: {expensive_country} (kaina: {expensive_price})")
Pigiausia šalis 2023 m. išsinomuoti būstą: Estonia (kaina: 49.54)
Brangiausia šalis 2023 m. išsinomuoti būstą: Cyprus (kaina: 114.86)

Koks euribor rodiklis ir kuriais metais buvo didžiausias/mažiausias?

In [29]:
sorted_data = euribor.sort_values(by='euribor_3_month')

min_euribor = sorted_data.iloc[0]['euribor_3_month']
min_year = sorted_data.iloc[0]['date'].year

max_euribor = sorted_data.iloc[-1]['euribor_3_month']
max_year = sorted_data.iloc[-1]['date'].year

print(f"Mažiausias euribor rodiklis buvo {min_euribor} ir buvo užfiksuotas {min_year} metais.")
print(f"Didžiausias euribor rodiklis buvo {max_euribor} ir buvo užfiksuotas {max_year} metais.")
Mažiausias euribor rodiklis buvo -0.582 ir buvo užfiksuotas 2021 metais.
Didžiausias euribor rodiklis buvo 7.58 ir buvo užfiksuotas 1995 metais.

Kuriais metais ir kokiose šalyse buvo fiksuotos didžiausios/mažiausios palūkanų normos?

In [30]:
sorted_data = loans.sort_values(by='loans_obs_value')

min_interest_rate = sorted_data.iloc[0]['loans_obs_value']
min_country = sorted_data.iloc[0]['country']
min_year = sorted_data.iloc[0]['date'].year

max_interest_rate = sorted_data.iloc[-1]['loans_obs_value']
max_country = sorted_data.iloc[-1]['country']
max_year = sorted_data.iloc[-1]['date'].year

print(f"Mažiausias paskolų palūkanų rodiklis buvo {min_interest_rate}% ir buvo užfiksuotas {min_year} metais šalyje {min_country}.")
print(f"Didžiausias paskolų palūkanų rodiklis buvo {max_interest_rate}% ir buvo užfiksuotas {max_year} metais šalyje {max_country}.")
Mažiausias paskolų palūkanų rodiklis buvo 0.72% ir buvo užfiksuotas 2021 metais šalyje Finland.
Didžiausias paskolų palūkanų rodiklis buvo 7.27% ir buvo užfiksuotas 2008 metais šalyje Slovenia.

Kuriose penkiose šalyse 2023 metais buvo mažiausios palūkanos?

In [31]:
loans_2023 = loans[loans['date'].dt.year == 2023]

average_interest_rates = loans_2023.groupby('country')['loans_obs_value'].mean()

sorted_countries = average_interest_rates.sort_values()

top_countries = sorted_countries.head(5)

print("Penkios šalys su mažiausiomis vidutinėmis palūkanomis 2023 metais:")
print(top_countries)
Penkios šalys su mažiausiomis vidutinėmis palūkanomis 2023 metais:
country
Malta      2.225556
France     2.838889
Croatia    3.117778
Belgium    3.513333
Spain      3.641111
Name: loans_obs_value, dtype: float64